home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dr. Windows 3
/
dr win3.zip
/
dr win3
/
WINPROGS
/
DRDOBBS.ZIP
/
WHSTRUCT.H
< prev
next >
Wrap
Text File
|
1993-08-03
|
11KB
|
271 lines
/* Windows Help File Internal Records
Pete Davis & Ron Burk - 05/93 */
typedef unsigned long DWORD;
typedef unsigned int WORD;
typedef unsigned char BYTE;
/* Define WHIFS Page Size and Page size for other B-Trees */
#define WHIFSPageSize 1024L
#define BTreePageSize 2048L
/* Define the size of a Topic Block 4k - sizeof(TOPICLINK) */
#define TopicBlockSize 4084L
#define GotoWHIFSPage(DestPage) \
fseek(HelpFile, FirstPageLoc+(DestPage * WHIFSPageSize), SEEK_SET)
#define GotoPage(DestPage) \
fseek(HelpFile, FirstPageLoc+(DestPage * BTreePageSize), SEEK_SET)
#define RGB(r,g,b) ((DWORD)(b*65536) + (DWORD)(g*256) + (DWORD) (r))
/* Help file Header record */
typedef struct HELPHEADER {
DWORD MagicNumber; /* 0x00035F3F */
long WHIFS; /* Pointer to WHIFS header */
long Negative1;
long FileSize; /* Size of entire .HLP File */
} HELPHEADER;
/* File Header for WHIFS files */
typedef struct FILEHEADER {
long FilePlusHeader; /* File size including this header */
long FileSize; /* File size not including header */
char TermNull;
} FILEHEADER;
/* Help Directory BTREE */
typedef struct WHIFSBTREEHEADER {
char Magic[18]; /* Not exactly magic for some .MVB files */
char Garbage[13];
int MustBeZero; /* Probably shows up when Help > ~40 megs */
int NSplits; /* Number of page split Btree has suffered */
int RootPage; /* Page # of root page */
int MustBeNegOne; /* Probably shows up when B-Tree is HUGE!! */
int TotalPages; /* total # to 2Kb pages in Btree */
int NLevels; /* Number of levels in this Btree */
DWORD TotalWHIFSEntries;
} WHIFSBTREEHEADER;
/* Keyword & TTL BTREE Headers - Slightly different than WHIFS B-tree Header.
Both WHIFS and Keyword B-Trees use same leaf and index node headers. */
typedef struct BTREEHEADER {
char Unknown1[22];
int MustBeZero1;
int NSplits; /* # of page splits Btree has suffered */
int RootPage; /* page #of root page */
int MustBeNegOne1;
int TotalPages; /* total # of 2Kb pages in Btree */
int NLevels; /* # of levels in this Btree */
DWORD TotalBtreeEntries;
} BTREEHEADER;
/* Modified B-Tree Node header to handle a pointer to the page */
typedef struct BTREENODEHEADER {
WORD Signature; /* Signature word */
int NEntries; /* Number of entries */
int PreviousPage; /* Index of Previous Page */
int NextPage; /* Index of Next Page */
} BTREENODEHEADER;
/* Modified B-Tree Index header to handle a pointer to the page */
typedef struct BTREEINDEXHEADER {
WORD Signature; /* Signature byte */
int NEntries; /* Number of entries in node */
} BTREEINDEXHEADER;
/* Phrase header In uncompressed, last field is empty */
typedef struct PHRASEHDR {
int NumPhrases; /* Number of phrases in table */
WORD OneHundred; /* 0x0100 */
long PhrasesSize; /* Amount of space uncompressed phrases requires. */
} PHRASEHDR;
/* Header for |FONT file */
typedef struct FONTHEADER {
WORD NumFonts; /* Number of fonts in Font List */
WORD NumDescriptors; /* Number of font descriptors */
WORD DefDescriptor; /* Default font descriptor */
WORD DescriptorsOffset; /* Offset to descriptor list */
} FONTHEADER;
typedef struct FONTDESCRIPTOR {
BYTE Attributes; /* Font Attributes See values below */
BYTE HalfPoints; /* PointSize * 2 */
BYTE FontFamily; /* Font Family. See values below */
BYTE FontName; /* Number of font in Font List */
BYTE Unknown;
BYTE FGRGB[3]; /* RGB values of foreground */
BYTE BGRGB[3]; /* background RGB Values (?? Not sure */
} FONTDESCRIPTOR;
/* Font Attributes */
#define FONT_NORM 0x00 /* Normal */
#define FONT_BOLD 0x01 /* Bold */
#define FONT_ITAL 0x02 /* Italics */
#define FONT_UNDR 0x04 /* Underline */
#define FONT_STRK 0x08 /* Strike Through */
#define FONT_DBUN 0x10 /* Dbl Underline */
#define FONT_SMCP 0x20 /* Small Caps */
/* Font Families */
#define FAM_MODERN 0x01
#define FAM_ROMAN 0x02
#define FAM_SWISS 0x03
#define FAM_TECH 0x03
#define FAM_NIL 0x03
#define FAM_SCRIPT 0x04
#define FAM_DECOR 0x05
/* Header for |SYSTEM file */
typedef struct SYSTEMHEADER {
BYTE Magic; /* 0x6C */
BYTE Version; /* Version # */
BYTE Revision; /* Revision code */
BYTE Always0; /* Unknown */
WORD Always1; /* Always 0x0001 */
DWORD GenDate; /* Date/Time that the help file was generated */
WORD Flags; /* Values seen: 0x0000 0x0004, 0x0008, 0x000A */
} SYSTEMHEADER;
/* Flags for |SYSTEM header Flags field below */
#define NO_COMPRESSION_310 0x0000
#define COMPRESSION_310 0x0004
#define COMPRESSION_UNKN 0x0008
#define SYSFLAG_300 0x000A
/* Help Compiler 3.1 System record. Multiple records possible */
typedef struct SYSTEMREC {
WORD RecordType; /* Type of Data in record */
WORD DataSize; /* Size of RData */
char *RData; /* Raw data (Icon, title, etc) */
} SYSTEMREC;
/* Types for SYSTEMREC RecordType below */
#define HPJ_TITLE 0x0001 /* Title from .HPJ file */
#define HPJ_COPYRIGHT 0x0002 /* Copyright notice from .HPJ file */
#define HPJ_CONTENTS 0x0003 /* Contents=??? from .HPJ */
#define MACRO_DATA 0x0004 /* SData = 4 nulls if no macros */
#define ICON_DATA 0x0005
#define HPJ_SECWINDOWS 0x0006 /* Secondary window info in .HPJ */
#define HPJ_CITATION 0x0008 /* CITATION= under [OPTIONS] */
/* Secondary Window Record following type 0x0006 System Record */
typedef struct SECWINDOW {
WORD Flags; /* Flags (See Below) */
BYTE Type[10]; /* Type of window */
BYTE Name[9]; /* Window name */
BYTE Caption[51]; /* Caption for window */
WORD X; /* X coordinate to start at */
WORD Y; /* Y coordinate to start at */
WORD Width; /* Width to create for */
WORD Height; /* Height to create for */
WORD Maximize; /* Maximize flag */
BYTE Rgb[3];
BYTE Unknown1;
BYTE RgbNsr[3]; /* RGB for non scrollable region */
BYTE Unknown2;
} SECWINDOW;
/** Values for Flags **/
#define WSYSFLAG_TYPE 0x0001 /* Type is valid */
#define WSYSFLAG_NAME 0x0002 /* Name is valid */
#define WSYSFLAG_CAPTION 0x0004 /* Ccaption is valid */
#define WSYSFLAG_X 0x0008 /* X is valid */
#define WSYSFLAG_Y 0x0010 /* Y is valid */
#define WSYSFLAG_WIDTH 0x0020 /* Width is valid */
#define WSYSFLAG_HEIGHT 0x0040 /* Height is valid */
#define WSYSFLAG_MAXIMIZE 0x0080 /* Maximize is valid */
#define WSYSFLAG_RGB 0x0100 /* Rgb is valid */
#define WSYSFLAG_RGBNSR 0x0200 /* RgbNsr is valid */
#define WSYSFLAG_TOP 0x0400 /* On top was set in HPJ file */
/* Header for |TOMAP file */
typedef struct TOMAPHEADER {
long IndexTopic; /* Index topic for help file */
long Reserved[15];
int ToMapLen; /* Number of topic pointers */
long *To